API Gateway REST API でデプロイした一部のステージやリソースへのアクセスのみ制限する方法
困っていた内容
API Gateway REST API でデプロイした一部のリソースのパスやメソッド、もしくは特定のステージ全体を制限して、ユーザからアクセスできないようにしたいです。
コンソール上からだとそのようなことができるボタンなど確認できませんでした。
そのような方法が別にありましたら教えてください。
どう対応すればいいの?
API Gateway のリソースポリシーを利用して、アクセス制限できます。
リソースポリシーの設定次第で、特定のリソースのパスやステージ、メソッドに対して、アクセス制御を行うことが可能です。
注意点として、リソースポリシーの変更を API ステージに反映するには、API の再デプロイが必要です。
API Gateway コンソールから REST API をデプロイする - Amazon API Gateway
設定方法
リソースポリシーの設定例を以下に記載します。
ステージ全体へのアクセスを制限する場合
例えば、API ステージ /prod 全体のリクエストをアクセス制限させる場合、リソースポリシーは以下の様になります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/prod" }, { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/*" } ] }
実際に curl でリクエストを送ると以下のエラーがレスポンスされます。
$ curl -i https://xxxxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/pets HTTP/2 403 date: Thu, 12 May 2022 01:11:20 GMT content-type: application/json content-length: 186 x-amzn-requestid: bfb5f7ff-9e8f-4ead-ba59-xxxxxxxxxxxx x-amzn-errortype: AccessDeniedException x-amz-apigw-id: xxxxxxxxxxxx {"Message":"User: anonymous is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:ap-northeast-1:************:xxxxxxxxxxxx/prod/GET/pets with an explicit deny"}
特定のステージのリソースパスへのアクセスを制限する場合
例えば、API ステージ /dev のリソースパス /pets の GET メソッドに対してのみアクセスを制限させる場合、リソースポリシーは以下の様になります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/dev/GET/pets" }, { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/*" } ] }
実際に curl でリクエストを送ると以下のエラーがレスポンスされます。
$ curl -i https://xxxxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/pets HTTP/2 403 date: Thu, 12 May 2022 01:08:09 GMT content-type: application/json content-length: 185 x-amzn-requestid: 94484f4d-9b8d-4bb4-a156-xxxxxxxxxxxxxx x-amzn-errortype: AccessDeniedException x-amz-apigw-id: xxxxxxxxxxxxxxxx {"Message":"User: anonymous is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:ap-northeast-1:********:xxxxxxxxxx/dev/GET/pets with an explicit deny"}
参考資料
- API Gateway リソースポリシーの例 - Amazon API Gateway
たとえば、リソースポリシー execute-api:/stage-name/GET/pets でリソースを指定できます。
-
[新機能] API のアクセスコントロールが簡単に!API Gateway でリソースポリシーが設定可能になりました | DevelopersIO